It is common for electronic devices to communicate directly or indirectly with each other. A major problem, however, is that not all devices are capable of performing operations at the same maximum speed. A conventionally technique used to overcome this problem is to adjust the speed of one of the devices. Typically the speed of the fastest machine is changed. This of course results in reduced overall system performance.
The simplest way to adjust the speed of a CPU-based device is to perform operations at integer multiples of the CPU's clock speed. For instance, consider a system in which a CPU permits two peripheral devices to communicate with each other, in which the CPU performs operations at 50 MHz, the first device runs at 20 MHz and the second device runs at 25 MHz.
The goal is to cycle data transfers between devices 1 and 2 at the highest possible rate. The CPU's frequency is not an integer multiple of the two lower frequencies, but the overall frequency of the system is limited to integer multiples of the CPU's clock frequency. Hence, transfers must be done once every two cycles, or once every three cycles, and the frequency of the CPU and chip 1 would have to be adjusted.